package com.example.demo.dao;



import com.example.demo.entity.PO.DialoguePO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author zhangjingqi
 * @date 2023/11/23
 */
@Mapper
public interface DialogueMapper {


    /**
     * 保存对话
	 * @param dialoguePO 对话PO
	 * @return 插入影响的行数
	 */
	int saveDialogue(DialoguePO dialoguePO);

	/**
	 * 软删除该用户与该pet的历史对话
	 *
	 * @param petId
	 * @param userId
	 * @return 更新影响行数
	 */
	int deleteDialogueOfUser(Integer petId, Integer userId);

	/**
	 * 删除pet的所有对话
	 * @param petId
	 * @return 操作影响的行数
	 */
	int deleteDialogueByPetId(Integer petId);

	/**
	 * 删除对应id的dialogue
	 * @param id  dialogueId
	 * @return 操作影响的行数
	 */
	int deleteDialogueById(Integer id);

	/**
	 * 软删除对应id的dialogue
	 * @param id  dialogueId
	 * @return 操作影响的行数
	 */
	int disableDialogueById(Integer id);

	/**
	 * 获取用户与petId的对话数
	 *
	 * @param petId
	 * @param userId
	 * @return 对话数（试聊次数）
	 */
	int getDialogueAmount(Integer petId, Integer userId);

	/**
     *批量获取对话记录
	 * @param petId
	 * @param userId
	 * @param cursor 游标，（即对话序号），返回cursor之前的对话，若为null则返回最近的对话
	 * @param size 一次查询的对话数
	 * @return
	 */
	List<DialoguePO> batchGetDialogue(@Param("petId") Integer petId,@Param("userId") Integer userId, @Param("cursor") Integer cursor, @Param("size") int size);

	/**
	 * 根据id获取dialogue
	 *
	 * @param id dialogueId
	 * @return dialogue完整信息
	 */
	DialoguePO getDialogueById(Integer id);

	/**
	 *在发送消息时获取历史记录
	 * @param petId
	 * @param userId
	 * @param size 一次查询的对话数
	 * @return 历史记录（json）
	 */
	List<String> getDialogueHistory(@Param("petId") Integer petId,@Param("userId") Integer userId, @Param("size") int size);



}
